#include <STC89C5xRC.H>
sbit I2C_SCL=P2^1;
sbit I2C_SDA=P2^0;


/**
 * @brief I2C开始
 * @param 无
 * @retval 无
 **/
void I2C_Strat()
{
	I2C_SDA=1;
	I2C_SCL=1;
	I2C_SDA=0;
	I2C_SCL=0;
}

/**
 * @brief I2C停止
 * @param 无
 * @retval 无
 **/
void I2C_Stop()
{
	I2C_SDA=0;
	I2C_SCL=1;
	I2C_SDA=1;//SCL、SDA均为高位符合空闲状态的要求
}

/**
 * @brief I2C发送字节
 * @param 要发送的数据（一个字节）
 * @retval 无
 **/
void I2C_SendByte(unsigned char Byte)
{	
	int i = 0;
	for(i=0;i<8;i++)
	{
		I2C_SDA = Byte&(0x80>>i);
		I2C_SCL=1;//这里注意查手册，确保拉高立马拉低可以读到数据
		I2C_SCL=0;//手册显示最大频率1000kHz,大于单片机(500kHz)
	}

}

/**
 * @brief I2C接受一个字节
 * @param 无
 * @retval 接收到的一个字节数据
 **/
unsigned char I2C_ReceiveByte()
{	
	unsigned char i,Byte=0x00;
	I2C_SDA=1;
	for(i=0;i<8;i++)
	{
		I2C_SCL=1;
		if(I2C_SDA){Byte|=(0x80>>i);}
		I2C_SCL=0;
	}
	return Byte;
}

/**
 * @brief I2C发送应答
 * @param AckBit 应答位，0：应答；1：非应答
 * @retval 无
 **/
void I2C_SendAck(unsigned char AckBit)
{
	I2C_SDA = AckBit;//选择应答或非应答，0为应答，1为非应答
	I2C_SCL=1;
	I2C_SCL=0;
}

/**
 * @brief I2C接受应答位
 * @param 无
*  @retval 接收到的应答位，0为应答，1为非应答
 **/

unsigned char I2C_ReceiveAck()
{	
	unsigned char AckBit;
	I2C_SDA=1;
	I2C_SCL=1;
	AckBit=I2C_SDA;
	I2C_SCL=0;
	return AckBit;
}